/*
 * @lc app=leetcode.cn id=345 lang=cpp
 *
 * [345] 反转字符串中的元音字母
 */

#include <limits.h>

#include <algorithm>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
using namespace std;

// @lc code=start
class Solution {
public:
    string reverseVowels(string s) {
        int left = -1;              // 左指针
        int right = s.size();       // 有指针
        int flag = 0;               // 记录是否找到元音字母

        while (left < right) {
            // 寻找最左侧的元音字母
            flag = 0;
            for (left = left + 1; left < right; left++) {
                if (isVowel(s[left])) {
                    flag = 1;
                    break;
                }
            }
            if (flag == 0) {
                break;
            } 

            // 寻找最右侧的元音字母
            flag = 0;
            for (right = right - 1; right > left; right--) {
                if (isVowel(s[right])) {
                    flag = 1;
                    break;
                }
            }
            if (flag == 0) {
                break;
            }
            
            // 交换左右的元音字母
            swap(s[left], s[right]);
        }
        
        return s;
    }

    bool isVowel(char c) {
        if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
            return true;
        }
        if (c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U') {
            return true;
        }
        return false;
    }
};
// @lc code=end

